home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / nrpas13.arc / BESSI.PAS < prev    next >
Pascal/Delphi Source File  |  1991-05-01  |  861b  |  36 lines

  1. FUNCTION bessi(n: integer; x: real): real;
  2. CONST
  3.    iacc=40;
  4.    bigno=1.0e10;
  5.    bigni=1.0e-10;
  6. VAR
  7.    bi,bim,bip,tox,ans: real;
  8.    j,m: integer;
  9. BEGIN
  10.    IF  (n < 2) THEN BEGIN
  11.       writeln('pause in routine BESSI');
  12.       writeln('index n is less than 2'); readln
  13.    END;
  14.    IF (x=0.0) THEN bessi := 0.0
  15.    ELSE BEGIN
  16.       ans := 0.0;
  17.       tox := 2.0/abs(x);
  18.       bip := 0.0;
  19.       bi := 1.0;
  20.       m := 2*(n+trunc(sqrt(iacc*n)));
  21.       FOR j := m DOWNTO 1 DO BEGIN
  22.          bim := bip+j*tox*bi;
  23.          bip := bi;
  24.          bi := bim;
  25.          IF (abs(bi) > bigno) THEN BEGIN
  26.             ans := ans*bigni;
  27.             bi := bi*bigni;
  28.             bip := bip*bigni
  29.          END;
  30.          IF (j=n) THEN ans := bip
  31.       END;
  32.       IF (x<0.0) AND ((n MOD 2)=1) THEN ans := -ans;
  33.       bessi := ans*bessi0(x)/bi
  34.    END
  35. END;
  36.